/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef _UAPI_ASM_SW64_TERMBITS_H
#define _UAPI_ASM_SW64_TERMBITS_H

#include <linux/posix_types.h>

typedef unsigned char	cc_t;
typedef unsigned int	speed_t;
typedef unsigned int	tcflag_t;

/*
 * termios type and macro definitions.  Be careful about adding stuff
 * to this file since it's used in GNU libc and there are strict rules
 * concerning namespace pollution.
 */

#define NCCS 19
struct termios {
	tcflag_t c_iflag;		/* input mode flags */
	tcflag_t c_oflag;		/* output mode flags */
	tcflag_t c_cflag;		/* control mode flags */
	tcflag_t c_lflag;		/* local mode flags */
	cc_t c_cc[NCCS];		/* control characters */
	cc_t c_line;			/* line discipline (== c_cc[19]) */
	speed_t c_ispeed;		/* input speed */
	speed_t c_ospeed;		/* output speed */
};

/* SW-64 has matching termios and ktermios */

struct ktermios {
	tcflag_t c_iflag;		/* input mode flags */
	tcflag_t c_oflag;		/* output mode flags */
	tcflag_t c_cflag;		/* control mode flags */
	tcflag_t c_lflag;		/* local mode flags */
	cc_t c_cc[NCCS];		/* control characters */
	cc_t c_line;			/* line discipline (== c_cc[19]) */
	speed_t c_ispeed;		/* input speed */
	speed_t c_ospeed;		/* output speed */
};

/* c_cc characters */
#define VEOF		0
#define VEOL		1
#define VEOL2		2
#define VERASE		3
#define VWERASE		4
#define VKILL		5
#define VREPRINT	6
#define VSWTC		7
#define VINTR		8
#define VQUIT		9
#define VSUSP		10
#define VSTART		12
#define VSTOP		13
#define VLNEXT		14
#define VDISCARD	15
#define VMIN		16
#define VTIME		17

/* c_iflag bits */
#define IGNBRK		0000001
#define BRKINT		0000002
#define IGNPAR		0000004
#define PARMRK		0000010
#define INPCK		0000020
#define ISTRIP		0000040
#define INLCR		0000100
#define IGNCR		0000200
#define ICRNL		0000400
#define IXON		0001000
#define IXOFF		0002000
#define IXANY		0004000
#define IUCLC		0010000
#define IMAXBEL		0020000
#define IUTF8		0040000

/* c_oflag bits */
#define OPOST		0000001
#define ONLCR		0000002
#define OLCUC		0000004

#define OCRNL		0000010
#define ONOCR		0000020
#define ONLRET		0000040

#define OFILL		00000100
#define OFDEL		00000200
#define NLDLY		00001400
#define   NL0		00000000
#define   NL1		00000400
#define   NL2		00001000
#define   NL3		00001400
#define TABDLY		00006000
#define   TAB0		00000000
#define   TAB1		00002000
#define   TAB2		00004000
#define   TAB3		00006000
#define	CRDLY		00030000
#define   CR0		00000000
#define   CR1		00010000
#define   CR2		00020000
#define   CR3		00030000
#define FFDLY		00040000
#define   FF0		00000000
#define   FF1		00040000
#define BSDLY		00100000
#define   BS0		00000000
#define   BS1		00100000
#define VTDLY		00200000
#define   VT0		00000000
#define   VT1		00200000
#define XTABS		01000000	/* Hmm.. Linux/i386 considers this part of TABDLY.. */

/* c_cflag bit meaning */
#define CBAUD		0000037
#define  B0		0000000		/* hang up */
#define  B50		0000001
#define  B75		0000002
#define  B110		0000003
#define  B134		0000004
#define  B150		0000005
#define  B200		0000006
#define  B300		0000007
#define  B600		0000010
#define  B1200		0000011
#define  B1800		0000012
#define  B2400		0000013
#define  B4800		0000014
#define  B9600		0000015
#define  B19200		0000016
#define  B38400		0000017
#define EXTA		B19200
#define EXTB		B38400
#define CBAUDEX		0000000
#define  B57600		00020
#define  B115200	00021
#define  B230400	00022
#define  B460800	00023
#define  B500000	00024
#define  B576000	00025
#define  B921600	00026
#define  B1000000	00027
#define  B1152000	00030
#define  B1500000	00031
#define  B2000000	00032
#define  B2500000	00033
#define  B3000000	00034
#define  B3500000	00035
#define  B4000000	00036

#define CSIZE		00001400
#define   CS5		00000000
#define   CS6		00000400
#define   CS7		00001000
#define   CS8		00001400

#define CSTOPB		00002000
#define CREAD		00004000
#define PARENB		00010000
#define PARODD		00020000
#define HUPCL		00040000

#define CLOCAL		00100000
#define CMSPAR		010000000000		/* mark or space (stick) parity */
#define CRTSCTS		020000000000		/* flow control */

/* c_lflag bits */
#define ISIG		0x00000080
#define ICANON		0x00000100
#define XCASE		0x00004000
#define ECHO		0x00000008
#define ECHOE		0x00000002
#define ECHOK		0x00000004
#define ECHONL		0x00000010
#define NOFLSH		0x80000000
#define TOSTOP		0x00400000
#define ECHOCTL		0x00000040
#define ECHOPRT		0x00000020
#define ECHOKE		0x00000001
#define FLUSHO		0x00800000
#define PENDIN		0x20000000
#define IEXTEN		0x00000400
#define EXTPROC		0x10000000

/* Values for the ACTION argument to `tcflow'.  */
#define	TCOOFF		0
#define	TCOON		1
#define	TCIOFF		2
#define	TCION		3

/* Values for the QUEUE_SELECTOR argument to `tcflush'.  */
#define	TCIFLUSH	0
#define	TCOFLUSH	1
#define	TCIOFLUSH	2

/* Values for the OPTIONAL_ACTIONS argument to `tcsetattr'.  */
#define	TCSANOW		0
#define	TCSADRAIN	1
#define	TCSAFLUSH	2

#endif /* _UAPI_ASM_SW64_TERMBITS_H */
